/**
 * 十进制转十六进制
 * @param {Number} origin 待转换十进制数
 * @returns 十六进制数
 */
function decToHex(origin) {
	// 初始化一个数组作为栈
	let stack = [];
	while (origin != 0) {
		// 先把待转换数取余16得到的结果压入栈
		stack.push(origin % 16);
		// 然后自己除以16（记得取整）
		origin = Math.floor(origin / 16);
		// 自己除16之后若仍然不为零则重复上述步骤
	}
	// 运算完毕，把栈的内容弹出组装结果
	let result = '';
	while (stack.length != 0) {
		let eachInt = stack.pop();
		// 十六进制中10,11,12,13,14,15分别对应a,b,c,d,e,f，因此在此做个转换
		switch (eachInt) {
			case 10:
				result = result + "a";
				break;
			case 11:
				result = result + "b";
				break;
			case 12:
				result = result + "c";
				break;
			case 13:
				result = result + "d";
				break;
			case 14:
				result = result + "e";
				break;
			case 15:
				result = result + "f";
				break;
			default:
				result = result + eachInt;
				break;
		}
	}
	return result;
}

// 测试
console.log(decToHex(1762));

/**
 * 判断表达式括号是否匹配
 * @param {String} expression 表达式
 * @returns 表达式括号是否匹配
 */
function isExpressionBracketsMatch(expression) {
	// 用一个数组作为栈
	let stack = [];
	// 遍历表达式字符
	let expChars = expression.split('');
	for (let eachChar of expChars) {
		// 如果是左括号，就压入栈
		if (eachChar == '(' || eachChar == '[' || eachChar == '{') {
			stack.push(eachChar);
		} else if (eachChar == ')' || eachChar == ']' || eachChar == '}') {
			// 如果是右括号则将栈里的字符弹出一个
			// 如果遇到右括号，对栈弹出的时候，栈已经是空的了，说明有多余的右括号
			if (stack.length == 0) {
				return false;
			}
			stack.pop();
		}
		// 别的字符不管
	}
	// 结束之后，如果栈为空说明表达式所有括号都有匹配
	return stack.length == 0;
}

// 测试
console.log(isExpressionBracketsMatch('console.log(Math.floor(1.5))'));
console.log(isExpressionBracketsMatch('(()))'));
console.log(isExpressionBracketsMatch('{{{[][[[()]]}}}'));